package com.zhuanzhuan.hero.user.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.zhuanzhuan.hero.user.dto.label.QueryBrandModelLabelDTO;
import com.zhuanzhuan.hero.user.entity.HeroLabelInfo;
import com.zhuanzhuan.hero.user.pojo.bo.CreateLabelBO;
import com.zhuanzhuan.hero.user.pojo.bo.LabelInfoQueryBO;
import com.zhuanzhuan.hero.user.vo.label.LevelLabelVO;

import java.util.Date;
import java.util.List;
import java.util.Map;

/**
 * dal Interface:HeroLabelInfo
 * @author hanjunjun
 * @date 2024-6-21
 */
public interface HeroLabelInfoService extends IService<HeroLabelInfo> {

    HeroLabelInfo queryById(Long id);

    List<HeroLabelInfo> listById(List<Long> ids);

    /**
     * 多条件查询
     *
     * @param labelInfoQuery
     * @return java.util.List<com.zhuanzhuan.hero.user.entity.HeroLabelInfo>
     * @author  hanjunjun
     * @date 2024/6/26
     **/
    List<HeroLabelInfo> listByParam(LabelInfoQueryBO labelInfoQuery);

    /**
     * 根据labelCode删除
     *
     * @param labelCodes
     * @return void
     * @author  hanjunjun
     * @date 2024/6/25
     **/
    void delByLabelCodes(List<String> labelCodes);

    /**
     * 根据标签id删除
     *
     * @param ids
     * @param operaterUid  可以为空
     * @param needDelRelation  是否删除对应对的关联关系
     * @return void
     * @author  hanjunjun
     * @date 2024/7/2
     **/
    void delByIds(List<Long> ids, Integer labelType, Long operaterUid, boolean needDelRelation);

    /**
     * 拉取盘古9手机品牌 更新本地标签
     *
     * @param
     * @return void
     * @author  hanjunjun
     * @date 2024/6/26
     **/
    void pullPanguBrandLabels();

    /**
     * 查询内服分类标签   多次分层级查
     *
     * @param queryBrandModelLabelDTO
     * @return java.util.List<com.zhuanzhuan.hero.user.vo.label.LevelLabelVO>
     * @author  hanjunjun
     * @date 2024/6/26
     **/
    List<LevelLabelVO> queryContentCategoryLabels(QueryBrandModelLabelDTO queryBrandModelLabelDTO);

    /**
     * 创建一个标签
     *
     * @param createLabelBO
     * @return labelId
     * @author  hanjunjun
     * @date 2024/7/1
     **/
    Long createLabel(CreateLabelBO createLabelBO);

    /**
     * 标签上架、下架
     *
     * @param labelId
     * @param labelState
     * @param operaterUid
     * @param operateTime
     * @return void
     * @author  hanjunjun
     * @date 2024/7/1
     **/
    void switchEffective(Long labelId, Integer labelState, Long operaterUid, Date operateTime);

    /**
     * 查询同行认证标签  用户自己创建的和运营创建的
     *
     * @param uid
     * @return void
     * @author  hanjunjun
     * @date 2024/7/3
     **/
    List<HeroLabelInfo> queryAllFraternityAuthLabels(Long uid);

    /**
     * 根据编码查标签
     * @param code
     * @return
     */
    List<HeroLabelInfo> queryLabelByCode(String code);

    /**
     * 所有标签类型等于1,2的标签
     * @return
     */
    List<HeroLabelInfo> queryAllLabelType2();

    /**
     * 不可为空   上层查出来或者new一个赋值id
     *
     * @param labelId
     * @param relatedNum  可为负数
     * @return void
     * @author  hanjunjun
     * @date 2024/7/19
     **/
    void increRelatedNum(Long labelId, int relatedNum);

    /**
     * 查询标签的关联用户数
     *
     * @param labelIds
     * @return java.util.Map<java.lang.Long,java.lang.Integer> k：labelId v；关联用户数
     * @author  hanjunjun
     * @date 2024/7/23
     **/
    Map<Long, Integer> queryLabelsRelatedNum(List<Long> labelIds);
}